package com.example.petchating.UI


import com.badlogic.gdx.graphics.g2d.SpriteBatch
import com.badlogic.gdx.graphics.g2d.TextureRegion
import com.badlogic.gdx.math.Rectangle
import com.badlogic.gdx.math.Vector2

class Button(
    //regionNormal：按钮正常状态下的纹理区域，这是必须提供的参数。
    //regionPressed：按钮被按下时的纹理区域，可选参数，若不提供则按钮按下时外观不变
    //x、y：按钮在屏幕中的位置。
    //width、height：按钮的宽度和高度。
    private val regionNormal: TextureRegion,
    private val regionPressed: TextureRegion? = null,
    x: Float, y: Float,
    width: Float, height: Float
) {
    //bounds：一个 Rectangle 对象，用于表示按钮的边界框，通过传入的位置和大小信息来初始化，用于后续的触摸检测

    private val bounds = Rectangle(x, y, width, height)
    var isPressed: Boolean = false
        private set

    //touchPos：触摸点的位置，以 Vector2 对象表示。
    //isTouched：表示当前是否有触摸操作。
    //该方法根据触摸操作和触摸点位置更新按钮的 isPressed 状态。只有当存在触摸操作且触摸点在按钮边界框内时，按钮才被认为是被按下的。
    fun update(touchPos: Vector2, isTouched: Boolean) {
        isPressed = isTouched && contains(touchPos.x, touchPos.y)
    }

    fun contains(x: Float, y: Float): Boolean {
        return bounds.contains(x, y)
    }

    //该方法根据按钮的 isPressed 状态选择要绘制的纹理区域。如果按钮被按下且提供了按下状态的纹理，则绘制按下状态的纹理；
    //否则，绘制正常状态的纹理
    fun draw(batch: SpriteBatch) {
        val region = if (isPressed && regionPressed != null) regionPressed else regionNormal
        batch.draw(region, bounds.x, bounds.y, bounds.width, bounds.height)
    }
}
